Add bitwarden-test-toolkit plugin with assessing-test-coverage skill#169
Add bitwarden-test-toolkit plugin with assessing-test-coverage skill#169nthompson-bitwarden wants to merge 11 commits into
Conversation
Plugin Validation Summary —
|
| Check | Result |
|---|---|
plugin.json valid JSON, kebab-case name, semver 1.0.0, required fields |
✅ |
Directory layout & skill auto-discovery (skills/<name>/SKILL.md) |
✅ |
Name/version consistency across plugin.json, marketplace.json, CHANGELOG.md |
✅ all agree at bitwarden-test-toolkit / 1.0.0 |
marketplace.json description matches plugin.json exactly |
✅ |
README.md present & comprehensive; CHANGELOG.md in Keep a Changelog format |
✅ |
No stray files (.DS_Store, __pycache__, result.json) |
✅ |
| No hardcoded credentials | ✅ |
evals/ harness (Python runner + JSON fixtures) placement & structure |
✅ appropriately co-located with the skill |
No components other than the one skill (no agents, commands, hooks, or MCP servers) — as expected.
2. Skill Review — assessing-test-coverage/SKILL.md — ✅ PASS
- Frontmatter: valid;
namematches directory;descriptionpresent. - Description quality: exemplary — quotes 5 positive trigger phrases and enumerates 5 explicit out-of-scope counter-examples, giving strong collision avoidance against strategy/design/test-authoring requests.
- Writing style: imperative/infinitive throughout; clear numbered Steps → Gotchas → Output template flow.
- Word count: ~615 words — below the 1,000–3,000 guideline, but appropriate and deliberate for a linear procedural workflow with a fixed output template. Padding would dilute it.
- Progressive disclosure: core SKILL.md is lean; the output template is inlined (single load-bearing artifact);
evals/is dev/CI tooling correctly kept off the runtime content path. - Reference integrity: all references resolve —
Skill(bitwarden-atlassian-tools:researching-jira-issues)exists;${CLAUDE_PLUGIN_DATA}usage is consistent with the README. - Notable strengths: treats Jira/Confluence/PR/CSV input as untrusted data and cites CWE-1427 (prompt injection); least-privilege sub-command-scoped Bash grants; anti-hallucination guardrail ("never assert 'no tests' for a surface you have not inspected").
3. Security Review — ✅ PASS (no findings)
- Committed secrets / credentials: none. The only
tokenoccurrence isTARGET_SKILL_TOKEN = "assessing-test-coverage"(evals/run_real_eval.py:22) — a skill-name identifier, not a secret. - Settings files: none in this PR — no
settings.local.jsonrisk. - Permission scoping (
SKILL.md:5): Bash grants are tightly scoped to specific sub-commands (Bash(gh pr view:*),Bash(date:*), etc.) rather than blanketBash(*)— good least-privilege. No destructive or auto-approved dangerous commands. - JSON fixtures: contain only natural-language test queries and public repo/PR references — no sensitive data.
run_real_eval.py: developer/CI eval tooling only; passes inherited env minusCLAUDECODEtoclaude -psubprocesses; never loaded at skill runtime, no exfiltration.
Minor / Advisory Notes (non-blocking)
SKILL.md:4—argument-hintfield: this is a slash-command frontmatter field, not a documented skill field. It is inert (ignored) for a skill since skills trigger on natural language. Harmless as self-documentation; optionally remove or fold the input formats into the description/body.SKILL.md:27/README.md:13—${CLAUDE_PLUGIN_DATA}: referenced but not defined within the plugin (unlike the standard${CLAUDE_PLUGIN_ROOT}). Confirm the host runtime provides this variable; otherwise the report path resolves to a bare relativecoverage-reports/…. Used consistently in both files, so this appears intentional.evals/run_real_eval.py:135vsevals/README.md:13—--modeldefault: the runner defaults toclaude-opus-4-7, while the recorded baseline usedclaude-sonnet-4-6. Intentional (the README example overrides the default), but aligning the default or adding a one-line note would prevent confusion when reproducing the baseline.
Recommendation: APPROVE. All structural, skill-quality, and security checks pass. The three notes above are advisory and do not require changes before merge.
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE Reviewed the addition of the Code Review DetailsNo blocking or actionable findings. Notes considered and intentionally not flagged:
|
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Inline the previous references/ content into a lean, self-contained SKILL.md step list and delete the reference files. Tighten the skill description with explicit scope exclusions to sharpen triggering, add a prompt-injection guard for untrusted input (CWE-1427), and allow git clone so uncloned repos can be inspected before being marked unverified. Rework the trigger eval with a portable runner that watches for the real installed skill, refresh the README, and re-record the baseline. Latest run: 10/10 should-trigger, 10/10 should-not-trigger.
🎟️ Tracking
https://bitwarden.atlassian.net/browse/QA-1983
📔 Objective
Add the bitwarden-test-toolkit plugin to the marketplace, providing an assessing-test-coverage skill that analyzes a repository's existing test stack and reports coverage gaps — with supporting references and evals, plus the required marketplace registration and dictionary/README updates.